package com.example.demo.demo3.client;

import javafx.geometry.Insets;
import javafx.scene.control.*;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;

public class ClientUI {

    // 声明单号、长、宽、高、重量
    private TextField barcodeField, lengthField, widthField, heightField, weightField;
    // 声明输出文本域
    private TextArea outputArea;
    // 声明接收单号、重量、体积标签
    private Label receivedBarcodeLabel, receivedWeightLabel, receivedVolumeLabel;
    // 声明输入错误单号、长、宽、高、重量标签
    private Label barcodeErrorLabel, lengthErrorLabel, widthErrorLabel, heightErrorLabel, weightErrorLabel;

    // 创建无参构造网格布局方法
    public GridPane createGridPaneLayout() {
        // 初始化网格布局
        GridPane gridPane = new GridPane();
        // 设置上下左右内边距为10PX
        gridPane.setPadding(new Insets(10));
        // 设置列与列之间的水平间距为10PX
        gridPane.setHgap(10);
        // 设置行与行之间的垂直间距为10PX
        gridPane.setVgap(10);

        // 单号行（带单位）
        Label barcodeLabel = new Label("单号:");
        // 在第一列第一行放单号标签
        gridPane.add(barcodeLabel, 0, 0);
        // 在第二列第一行放单号输入框
        gridPane.add(barcodeField, 1, 0);
        // 在第三列第一行放单号错误提示标签
        gridPane.add(barcodeErrorLabel, 2, 0);

        // 长度行（带单位和乘号）
        Label lengthLabel = new Label("长度(cm):");
        // 在水平布局中，放长度输入框和乘号标签，且两者之间的距离是5px
        HBox lengthBox = new HBox(5, lengthField, new Label("×")); // 输入框与乘号组合
        // 在第一列，第二行中放长度标签
        gridPane.add(lengthLabel, 0, 1);
        // 在第二列，第二行中放水平布局里面的长度输入框和乘号标签
        gridPane.add(lengthBox, 1, 1);
        // 在第三列，第二行中放长度错误提示标签
        gridPane.add(lengthErrorLabel, 2, 1);

        // 宽度行（带单位和乘号）
        Label widthLabel = new Label("宽度(cm):");
        // 在水平布局中放宽度输入框和乘号标签，且两者之间的距离是5px
        HBox widthBox = new HBox(5, widthField, new Label("×")); // 输入框与乘号组合
        // 在第一列，第三行中放宽度标签
        gridPane.add(widthLabel, 0, 2);
        // 在第二列，第三行中放水平布局里面的宽度输入框和乘号标签
        gridPane.add(widthBox, 1, 2);
        // 在第三列，第三行中放宽度输入错误提示标签
        gridPane.add(widthErrorLabel, 2, 2);

        // 高度行（带单位和乘号）
        Label heightLabel = new Label("高度(cm):");
        // 在水平布局中放高度输入框和乘号标签，且两者之间的距离是5px
        HBox heightBox = new HBox(5, heightField, new Label("×")); // 输入框与乘号组合
        // 在第一列，第四行中放高度标签
        gridPane.add(heightLabel, 0, 3);
        // 在第二列，第四行中放水平布局里面的高度输入框和乘号标签
        gridPane.add(heightBox, 1, 3);
        // 在第三列，第四行中放高度错误标签
        gridPane.add(heightErrorLabel, 2, 3);

        // 重量行（带单位）
        Label weightLabel = new Label("重量(kg):");
        // 在第一列，第五行中放重量标签
        gridPane.add(weightLabel, 0, 4);
        // 在第二列，第五行中放重量输入框
        gridPane.add(weightField, 1, 4);
        // 在第散列，第五行中放重量错误提示标签
        gridPane.add(weightErrorLabel, 2, 4);

        // 声明发送按钮
        Button sendButton = new Button("发送");
        sendButton.setId("sendButton");
        // 在第二列，第六行中放发送按钮
        gridPane.add(sendButton, 1, 5);
        // 从第一列，第七行开始计算，并且，此文本域占据三列一行的范围
        gridPane.add(outputArea, 0, 6, 3, 1);


        return gridPane;
    }


    // 创建结果容器方法
    public VBox createResultBox() {
        // 初始化一个垂直布局容器，并且内部元素的垂直间距为10px
        VBox resultBox = new VBox(10);
        // 设置该容器的上下左右的内边距都为10px
        resultBox.setPadding(new Insets(10));
        // 把接收单号标签、接收重量标签、接收体积标签都放入垂直容器VBox中
        resultBox.getChildren().addAll(receivedBarcodeLabel, receivedWeightLabel, receivedVolumeLabel);
        // 返回容器
        return resultBox;
    }

    // 初始化用户组件方法
    public void initializeUIComponents() {
        // 初始化
        barcodeField = createTextField("输入单号");
        lengthField = createTextField("输入长度");
        widthField = createTextField("输入宽度");
        heightField = createTextField("输入高度");
        weightField = createTextField("输入重量");

        outputArea = new TextArea();
        outputArea.setEditable(false);

        receivedBarcodeLabel = new Label("接收到的单号: ");
        receivedWeightLabel = new Label("接收到的重量: ");
        receivedVolumeLabel = new Label("接收到的体积: ");

        barcodeErrorLabel = new Label("");
        lengthErrorLabel = new Label("");
        widthErrorLabel = new Label("");
        heightErrorLabel = new Label("");
        weightErrorLabel = new Label("");
    }

    // 创建单行文本方法
    private TextField createTextField(String promptText) {
        // 初始化单行提示文本
        TextField textField = new TextField();
        // 设置文本提示内容
        textField.setPromptText(promptText);
        return textField;
    }

    public TextField getBarcodeField() {
        return barcodeField;
    }

    public TextField getLengthField() {
        return lengthField;
    }

    public TextField getWidthField() {
        return widthField;
    }

    public TextField getHeightField() {
        return heightField;
    }

    public TextField getWeightField() {
        return weightField;
    }

    public TextArea getOutputArea() {
        return outputArea;
    }

    public Label getReceivedBarcodeLabel() {
        return receivedBarcodeLabel;
    }

    public Label getReceivedWeightLabel() {
        return receivedWeightLabel;
    }

    public Label getReceivedVolumeLabel() {
        return receivedVolumeLabel;
    }

    public Label getBarcodeErrorLabel() {
        return barcodeErrorLabel;
    }

    public Label getLengthErrorLabel() {
        return lengthErrorLabel;
    }

    public Label getWidthErrorLabel() {
        return widthErrorLabel;
    }

    public Label getHeightErrorLabel() {
        return heightErrorLabel;
    }

    public Label getWeightErrorLabel() {
        return weightErrorLabel;
    }
}